// pages/cart/cart.js

// 获取全局应用实例
const app = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    cart_list: [], // 购物车列表
    totalPrice: 0, // 总价
    selectAllStatus: false, // 全选状态
    startX: 0, // 开始触摸的 X 坐标
    startY: 0 // 开始触摸的 Y 坐标
  },

  // 跳转到首页
  goIndex() {
    wx.switchTab({
      url: "../index/index"
    })
  },

  // 切换选中状态
  selectList(e) {
    // 获取当前全选状态
    let selectAllStatus = this.data.selectAllStatus;
    // 获取当前点击条目的索引
    const index = e.currentTarget.dataset.index;
    // 获取购物车列表
    let cart_list = this.data.cart_list;
    // 获取当前条目的选中状态
    const selected = cart_list[index].selected;
    // 切换选中状态
    cart_list[index].selected = !selected;
    console.log(selected);
    // 检查购物车列表中的条目是否有未选中的
    const symbol = cart_list.some(cart => {
      return cart.selected === false;
    });
    // 如果存在未选中的条目，取消全选状态，否则设置为全选
    if (symbol) {
      this.data.selectAllStatus = false;
    } else {
      this.data.selectAllStatus = true;
    }

    // 更新数据
    this.setData({
      cart_list,
      selectAllStatus: this.data.selectAllStatus
    });
    // 计算总价
    this.getTotalPrice();
  },

  // 计算总价
  getTotalPrice() {
    let cart_list = this.data.cart_list;
    let totalPrice = 0;
    // 遍历购物车列表，累加选中条目的价格
    for (let i = 0; i < cart_list.length; i++) {
      if (cart_list[i].selected) {
        totalPrice += parseFloat(cart_list[i].select_num) * parseFloat(cart_list[i].price);
      }
    }
    console.log(totalPrice);
    // 更新总价
    this.setData({
      totalPrice
    });
  },

  // 全选或取消全选
  selectAll(e) {
    let selectAllStatus = this.data.selectAllStatus;
    // 切换全选状态
    selectAllStatus = !selectAllStatus;
    let cart_list = this.data.cart_list;
    // 遍历购物车列表，设置所有条目的选中状态
    for (let i = 0; i < cart_list.length; i++) {
      cart_list[i].selected = selectAllStatus;
    }
    // 更新数据
    this.setData({
      cart_list,
      selectAllStatus
    });
    // 计算总价
    this.getTotalPrice();
  },

  // 触摸开始事件处理
  touchstart(e) {
    // 遍历购物车列表，重置所有条目的触摸状态
    this.data.cart_list.map(item => {
      if (item.isTouchMove) {
        item.isTouchMove = false;
      }
    })
    // 更新开始触摸的坐标和购物车列表
    this.setData({
      startX: e.changedTouches[0].clientX,
      startY: e.changedTouches[0].clientY,
      cart_list: this.data.cart_list
    })
  },

  // 滑动事件处理
  touchmove(e) {
    var
      index = e.currentTarget.dataset.index, // 当前索引
      startX = this.data.startX, // 开始X坐标
      startY = this.data.startY, // 开始Y坐标
      touchMoveX = e.changedTouches[0].clientX, // 滑动变化后的X坐标
      touchMoveY = e.changedTouches[0].clientY, // 滑动变化后的Y坐标
      // 计算滑动角度
      angle = this.angle({
        X: startX,
        Y: startY
      }, {
        X: touchMoveX,
        Y: touchMoveY
      });
    // 遍历购物车列表，更新触摸状态
    this.data.cart_list.forEach(function (v, i) {
      v.isTouchMove = false
      // 如果滑动角度超过30度，不处理滑动
      if (Math.abs(angle) > 30) return;
      if (i == index) {
        if (touchMoveX > startX) // 右滑
          v.isTouchMove = false
        else // 左滑
          v.isTouchMove = true
      }
    })
    // 更新数据
    this.setData({
      cart_list: this.data.cart_list
    })
  },

  // 计算滑动角度
  angle(start, end) {
    var X = end.X - start.X,
      Y = end.Y - start.Y
    // 返回角度值（反正切值转换为角度）
    return 360 * Math.atan(Y / X) / (2 * Math.PI);
  },

  // 删除购物车条目
  delCartItem(e) {
    const index = e.currentTarget.dataset.index; // 获取当前条目的索引
    console.log(index);
    // 删除指定索引的条目
    this.data.cart_list.splice(index, 1);
    // 清空本地存储中的 select_num
    wx.clearStorageSync("select_num");
    // 更新购物车列表
    this.setData({
      cart_list: this.data.cart_list
    });
  },

  // 结算
  checkOut() {
    wx.showToast({
      title: '还不可以哦！', // 提示信息
      icon: 'success', // 图标
      duration: 2000 // 持续时间
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 页面加载时的逻辑
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // 页面初次渲染完成时的逻辑
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 页面显示时的逻辑
    const attr_item = wx.getStorageSync('attr_item'); // 获取本地存储中的属性项
    console.log(attr_item)
    let cart_list = this.data.cart_list;
    cart_list = [...attr_item]; // 更新购物车列表
    console.log(cart_list);
    const select_num = cart_list.map(item => {
      return item.select_num;
    })
    let goods_sum = 0;
    // 计算商品总数
    for (let i = 0, len = select_num.length; i < len; i++) {
      goods_sum += select_num[i];
    }
    wx.setStorageSync('goods_sum', goods_sum); // 将商品总数存储到本地
    console.log(goods_sum);
    this.setData({
      cart_list
    });
    console.log(this.data.cart_list);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    // 页面隐藏时的逻辑
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // 页面卸载时的逻辑
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    // 监听用户下拉动作的逻辑
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    // 页面上拉触底事件的处理逻辑
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    // 用户点击右上角分享的处理逻辑
  }
})
